Введение в шардирование | Tarantool
Документация на русском языке
поддерживается сообществом
Примеры и руководства Введение в шардирование

Введение в шардирование

Чтобы получить инструкции по установке, обратитесь к руководству по установке vshard.

For a pre-configured development cluster, check out the example/ directory in the vshard repository. This example includes 5 Tarantool instances and 2 replica sets:

  • router_1 – экземпляр роутера (router)
  • storage_1_a – экземпляр хранилища (storage), мастер первого набора реплик
  • storage_1_b – экземпляр хранилища (storage), реплика из первого набора реплик
  • storage_2_a – экземпляр хранилища (storage), мастер второго набора реплик
  • storage_2_b – экземпляр хранилища (storage), реплика из второго набора реплик

All instances are managed using the tt administrative utility.

Измените директорию example/ и используйте команду make для запуска кластера:

$ cd example/
$ make

Необходимо знать следующие команды make:

  • make start – запуск всех экземпляров Tarantool
  • make stop – остановка всех экземпляров Tarantool
  • make logcat – вывод журналов всех экземпляров
  • make enter – вход в административную консоль на роутере router_1
  • make clean – очистка всех персистентных данных
  • make test – запуск набора тестов (можно также выполнить test-run.py в директории с тестами test)
  • make – выполнить make stop, make clean, make start и make enter

Например, для запуска всех экземпляров используйте make start:

$ make start
$ ps x|grep tarantool
46564   ??  Ss     0:00.34 tarantool storage_1_a.lua <running>
46566   ??  Ss     0:00.19 tarantool storage_1_b.lua <running>
46568   ??  Ss     0:00.35 tarantool storage_2_a.lua <running>
46570   ??  Ss     0:00.20 tarantool storage_2_b.lua <running>
46572   ??  Ss     0:00.25 tarantool router_1.lua <running>

Для выполнения команд в административной консоли, используйте общедоступный API:

unix/:./data/router_1.control> vshard.router.info()
---
- replicasets:
    ac522f65-aa94-4134-9f64-51ee384f1a54:
      replica: &0
        network_timeout: 0.5
        status: available
        uri: storage@127.0.0.1:3303
        uuid: 1e02ae8a-afc0-4e91-ba34-843a356b8ed7
      uuid: ac522f65-aa94-4134-9f64-51ee384f1a54
      master: *0
    cbf06940-0790-498b-948d-042b62cf3d29:
      replica: &1
        network_timeout: 0.5
        status: available
        uri: storage@127.0.0.1:3301
        uuid: 8a274925-a26d-47fc-9e1b-af88ce939412
      uuid: cbf06940-0790-498b-948d-042b62cf3d29
      master: *1
  bucket:
    unreachable: 0
    available_ro: 0
    unknown: 0
    available_rw: 3000
  status: 0
  alerts: []
...

Конфигурация простого сегментированного кластера может выглядеть следующим образом:

local cfg = {
    memtx_memory = 100 * 1024 * 1024,
    bucket_count = 10000,
    rebalancer_disbalance_threshold = 10,
    rebalancer_max_receiving = 100,
    sharding = {
        ['cbf06940-0790-498b-948d-042b62cf3d29'] = {
            replicas = {
                ['8a274925-a26d-47fc-9e1b-af88ce939412'] = {
                    uri = 'storage:storage@127.0.0.1:3301',
                    name = 'storage_1_a',
                    master = true
                },
                ['3de2e3e1-9ebe-4d0d-abb1-26d301b84633'] = {
                    uri = 'storage:storage@127.0.0.1:3302',
                    name = 'storage_1_b'
                }
            },
        },
        ['ac522f65-aa94-4134-9f64-51ee384f1a54'] = {
            replicas = {
                ['1e02ae8a-afc0-4e91-ba34-843a356b8ed7'] = {
                    uri = 'storage:storage@127.0.0.1:3303',
                    name = 'storage_2_a',
                    master = true
                },
                ['001688c3-66f8-4a31-8e19-036c17d489c2'] = {
                    uri = 'storage:storage@127.0.0.1:3304',
                    name = 'storage_2_b'
                }
            },
        },
    },
}

Данный кластер включает в себя один роутер (router) и два хранилища (storage). Каждое хранилище storage включает в себя один мастер и одну реплику. Поле sharding (шардинг) определяет логическую топологию сегментированного кластера Tarantool. Все остальные поля передаются в box.cfg() в неизменном виде. Для получения подробной информации см. раздел Справочник по настройке.

На роутерах вызовите vshard.router.cfg(cfg):

cfg.listen = 3300

-- Запуск базы данных с шардингом
vshard = require('vshard')
vshard.router.cfg(cfg)

На хранилищах вызовите vshard.storage.cfg(cfg, uuid_экземпляра):

-- Получение имени экземпляра
local MY_UUID = "de0ea826-e71d-4a82-bbf3-b04a6413e417"

-- Вызов поставщика конфигурации
local cfg = require('localcfg')

-- Запуск базы данных с шардингом
vshard = require('vshard')
vshard.storage.cfg(cfg, MY_UUID)

vshard.storage.cfg() автоматически вызывает box.cfg() и настраивает порт для прослушивания и параметры репликации.

Образец конфигурации можно посмотреть в файлах router.lua и storage.lua в директории example/ репозитория vshard.

Нашли ответ на свой вопрос?
Обратная связь